home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 157_01 / qed7 < prev    next >
Text File  |  1987-10-10  |  4KB  |  192 lines

  1. /*  VERSION 0004  (DATE: 28/04/87)  (TIME: 17:06)  */
  2. /*
  3.     e (qed) screen editor
  4.  
  5.     (C) G. Nigel Gilbert, MICROLOGY, 1981
  6.  
  7.     August-December 1981
  8.  
  9.     Modified: Aug-Dec    1984:    BDS-C 'e'(vers 4.6a) to 'qe' (J.W. Haefner)
  10.               March        1985:    BDS-C 'qe' to DeSmet-C 'qed' (J.W. Haefner)
  11.  
  12.     FILE: qed7
  13.  
  14.     FUNCTIONS: getkey,testkey,getlow,testlow,getscankey,inkey,putret,
  15.             dispch,putch,inword,uspr,makedim,makebright,
  16.             putclr,dohelp
  17.            
  18.     PURPOSE: low level terminal i/o functions
  19.  
  20. */
  21.  
  22. #include "qed.h"
  23.  
  24. char getkey()    /*wait for a key to be pressed & return it, translating
  25.             to internal codes */
  26. {
  27.     char c;
  28.  
  29.     while (!(c=testkey()));
  30.     return c;
  31. }
  32.  
  33. char testkey()    /*if a key has been pressed, return it, else 0, translating*/
  34. {
  35.     char c, *tranp;
  36.     int i;
  37.  
  38.     if (!(c=inkey())) return 0;
  39.     if (c == *(tranp=tran)) {
  40.         while (!(c=inkey()));
  41.         c|=PARBIT;
  42.         }
  43.     if (c == BACKSP) return LEFTKEY;    /* synonym for move cursor left*/
  44.     for (i=1,tranp++; i < NKEYS; i++, tranp++)
  45.         if (c == *tranp) return i;
  46.     return c;
  47. }
  48.  
  49. char getlow()    /*get a key, converting control and u/c keys to l/c,
  50.             translation of ESCKEY only */
  51. {
  52.     char c;
  53.     
  54.     while (!(c=testlow()));
  55.     return c;
  56. }
  57.  
  58. char testlow()    /*test for a key, convert upper and control chars to lower case*/
  59. {
  60.     char c;
  61.  
  62.     if (!(c=inkey())) return 0;
  63.     if (tran[ESCKEY] == c) return ESCKEY;
  64.     if (c < ' ') c=c+96;
  65.     return (c >= 'A' && c <= 'Z' ? c+32 : c);
  66. }
  67.  
  68. char getscankey()    /*get a key, translation of ESCKEY, CR, LEFTKEY, DELLEFT,
  69.             RETRIEVE only */
  70. {
  71.     char c;
  72.     
  73.     while (!(c=inkey()));
  74.     if (tran[ESCKEY] == c) return ESCKEY_P;
  75.     if (tran[CR] == c) return CR_P;
  76.     if (tran[LEFTKEY] == c) return LEFTKEY_P;
  77.     if (tran[DELLEFT] == c) return DELLEFT_P;
  78.     if (tran[RETRIEVE] == c) return RETRIEVE_P;
  79.     
  80.     return c;
  81. }
  82.  
  83. char inkey()        /*return last key press,or 0 if none*/
  84. {
  85.     char c;
  86.     sint i;
  87.  
  88.     if (inbufp) {
  89.         c=inbuf[0];
  90.         inbufp--;
  91.         for (i=0; i < inbufp; i++) inbuf[i]=inbuf[i+1];
  92.         }
  93.     else c=_os(DIRIO,0xff) & ~PARBIT;
  94.     return c;
  95. }
  96.  
  97. putret()    /*type a CR/LF*/
  98. {
  99.     putch('\r');
  100.     putch('\n');
  101. }
  102.  
  103. dispch(c)    /*type a character (in different intensity if non-printable*/
  104. char c;
  105. {
  106.     if (c < ' ') {
  107.         makeother();
  108.         /*putch(c+64);*/
  109.         _os(DIRIO,c+64);
  110.         makeother();
  111.         }
  112.         /*else putch(c);*/
  113.     else _os(DIRIO,c);
  114. }
  115.  
  116. putch(c)    /*type a character; test for keyboard input*/
  117. char c;
  118. {
  119.     char cc;
  120.     _os(DIRIO,c);
  121.     if ( (cc=_os(DIRIO,0xff))) inbuf[inbufp++]=cc & ~PARBIT;
  122. }
  123.  
  124. inword(c)    /*return true if c is letter or digit*/
  125. char c;
  126. {
  127.     return  isalpha(c) || isdigit(c);
  128. }
  129.  
  130. uspr(sn,ln)        /*print 'n' as a number; return number of chars typed*/
  131. unsigned sn;
  132. long ln;
  133. {
  134.     int temp;
  135.     long n;
  136.  
  137.     n=0;
  138.     if (!ln) n=sn;
  139.     else n=ln;
  140.     if (n < 10) {
  141.         putch(n+'0');
  142.         return 1;
  143.         }
  144.     temp=uspr(0,n/10);
  145.     uspr(0,n%10);
  146.     return temp+1;
  147. }
  148.  
  149. makedim()
  150. {
  151.     if (!isdim) {
  152.         begdim();
  153.         isdim=YES;
  154.         }
  155. }
  156.  
  157. makebright()
  158. {
  159.     if (isdim) {
  160.         enddim();
  161.         isdim=NO;
  162.         }
  163. }
  164.  
  165. makeother()
  166. {
  167.     if (isdim) makebright();
  168.     else makedim();
  169. }
  170.  
  171. putclr()    /*clear the screen */
  172. {
  173.     delpage(0);
  174. }
  175.  
  176. dohelp()    /*display help menu */
  177. {
  178.     int y;
  179.  
  180.     /*pfirst=loc(pfirst,(HELPLINES-1));*/
  181.     pfirst=loc(pfirst,(HELPLINES-topline));
  182.     topline=HELPLINES;
  183.     for (y=1; y < HELPLINES; y++) deleteline(0);
  184.     if ((cline < pfirst) || (pfirst == lastl) ) {
  185.         puttext(); 
  186.         putpage(); 
  187.         }
  188.     gotoxy(0,1);
  189.     displayhelp();
  190.     /*blankedmess=NO;*/
  191. }
  192.